package ynu.edu.dish.dto;

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * 菜品DTO
 */
@Data
public class DishDTO {

    /**
     * 菜品ID
     */
    private Long id;

    /**
     * 菜品名称
     */
    @NotBlank(message = "菜品名称不能为空", groups = {Create.class})
    @Size(max = 50, message = "菜品名称长度不能超过50个字符")
    private String name;

    /**
     * 菜品价格
     */
    @NotNull(message = "菜品价格不能为空", groups = {Create.class})
    @DecimalMin(value = "0", message = "菜品价格不能小于0")
    private BigDecimal price;

    /**
     * 菜品图片
     */
    private String image;

    /**
     * 菜品描述
     */
    @Size(max = 500, message = "菜品描述长度不能超过500个字符")
    private String description;

    /**
     * 菜品状态：0-下架，1-上架
     */
    private Integer status;

    /**
     * 菜品分类ID
     */
    @NotNull(message = "菜品分类ID不能为空", groups = {Create.class})
    private Long categoryId;

    /**
     * 所属商家ID
     */
    @NotNull(message = "所属商家ID不能为空", groups = {Create.class})
    private Long merchantId;

    /**
     * 是否特价：0-否，1-是
     */
    private Integer isSpecial;

    /**
     * 特价价格
     */
    @DecimalMin(value = "0", message = "特价价格不能小于0")
    private BigDecimal specialPrice;

    /**
     * 是否推荐：0-否，1-是
     */
    private Integer isRecommended;

    /**
     * 菜品规格列表
     */
    private List<DishSpecDTO> specs;

    /**
     * 验证组：创建
     */
    public interface Create {}

    /**
     * 验证组：更新
     */
    public interface Update {}
} 